class Arrayutil {
  /**
   * 深度克隆
   */
  deepClone(data) {}
  /**
   * 数组平级结构转为树形结构
   * @param {转换的元数据} data 
   * @param {子级id} childId 
   * @param {父级id} parentId 
   * @returns 
   */
  assemTree(data, childId = 'id', parentId = 'pid') {
    return data.filter((item) => {
      const pid = item[parentId];
      const result = data.filter((i) => {
        if (i[childId] === pid) {
          if (!i.children) {
            i.children = [];
          }
          i.children.push(item)
          return true
        }
      })
      return result.length === 0
    })
  }

  /**
   * 数组去重
   * @param {元数据} data
   * @returns 新的数组
   */
  unique(data) {
    if (Array.hasOwnProperty('from')) {
      return Array.from(new Set(arr));
    } else {
      let obj = {}, arr = [];
      data.forEach((item) => {
        if (!obj[item]) {
          obj[item] = true;
          arr.push(obj)
        }
      })
      return arr
    }
  }

  /**
   * 两个数组的并集
   * @param {数组1} a
   * @param {数组2} b
   * @returns 新的数组
   */
  union(a, b) {
    const arr = a.concat(b);
    return this.unique(arr)
  }
  /**
   * 数组排序
   * @param {数据源} arr
   * @param {排序依据} key
   * @param {升序类型} type 默认： des 降序
   * @returns 
   */
  sortArr(arr, key, type = 'des') {
    const cloneData = this.deepClone(arr);
    cloneData.sort((a, b) => {
      return type === 'des' ? a[key] - b[key] : b[key] - a[key]
    })
  }
  /**
   * base64转换为文件
   * @param {base64数据} dataurl
   * @param {文件名} filename
   */
  Base64toFile(dataurl, filename) {
    var arr = dataurl.split(","),
      mime = arr[0].match(/:(.*?);/)[1],
      bstr = atob(arr[1]),
      n = bstr.length,
      u8arr = new Uint8Array(n);
    while (n--) {
      u8arr[n] = bstr.charCodeAt(n);
    }
    return new File([u8arr], filename, { type: mime });
  }
};

const u = new Arrayutil()
console.log(u)

export default Arrayutil
